#ifndef __GPIO_H
#define __GPIO_H
#include "stm32f1xx.h"
#include "stm32f1xx_ll_gpio.h"

typedef enum
{
  RESOLUTION_8 = 1,
  RESOLUTION_16,
  RESOLUTION_32,
  RESOLUTION_64,
}MOTOR_RESOLUTION;

void Gpio_init(void);
void Resolution_Configure(MOTOR_RESOLUTION Preassigned);
void GPIO_OUT_init(GPIO_TypeDef *GPIOx, uint32_t PinMask);
void GPIO_INUP_Init(GPIO_TypeDef *GPIOx, uint32_t PinMask);
void ShutDown_AllIO_High_resistance_mode(void);
void pwrKey_exti_interrupt(void);
void ChangeKey_exti_interrupt(void);
void Device_init(void);

#define LED_ON	LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_4) //GREEN
#define LED_OFF	LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_4) //GREEN

#define RED_LED_OFF	LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_5) //PWR_LED
#define RED_LED_ON	LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_5) //PWR_LED

#define SHUTTER_ON	LL_GPIO_SetOutputPin(GPIOC, LL_GPIO_PIN_14) //
#define SHUTTER_OFF	LL_GPIO_ResetOutputPin(GPIOC, LL_GPIO_PIN_14) //

//#define MOTOR_SLEEP	LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_4) //
//#define MOTOR_WACKUP	LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_4) //
//#define MOTOR_DIAG		LL_GPIO_IsInputPinSet(GPIOF, LL_GPIO_PIN_13)

#define MOTOR_PND_OFF	LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_2) //
#define MOTOR_PND_ON	LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_2) //

#define MOTOR_PWR_OFF	LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_12) //
#define MOTOR_PWR_ON	LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_12) //

#define BATTER_MOS_ON LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_14)
#define BATTER_MOS_OFF LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_14)

#define USB_MOS_ON LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_13)
#define USB_MOS_OFF LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_13)
#define USB_STATUS	LL_GPIO_IsInputPinSet(GPIOA, LL_GPIO_PIN_6)

#define BLE_PWR_ON LL_GPIO_SetOutputPin(GPIOC, LL_GPIO_PIN_15)// ble pwr EN
#define BLE_PWR_OFF LL_GPIO_ResetOutputPin(GPIOC, LL_GPIO_PIN_15)// ble pwr EN

#define BLE_AT_ON LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_8)// ble PWRC  
#define BLE_AT_OFF LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_8)// ble PWRC

#define BLE_SHUT_ON LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_9)
#define BLE_SHUT_OFF LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_9)

//#define CH340_PWR_ON LL_GPIO_SetOutputPin(GPIOF, LL_GPIO_PIN_7)// ble pwr EN
//#define CH340_PWR_OFF LL_GPIO_ResetOutputPin(GPIOF, LL_GPIO_PIN_7)// ble pwr EN


#define BLUE_STATUS LL_GPIO_IsInputPinSet(GPIOB, LL_GPIO_PIN_5)

#define KeyPowr		LL_GPIO_IsInputPinSet(GPIOC, LL_GPIO_PIN_13)//
#define CHARGE_STATU LL_GPIO_IsInputPinSet(GPIOB, LL_GPIO_PIN_3)


#endif
